home *** CD-ROM | disk | FTP | other *** search
- #define abs(x) ((x)<0?-(x):(x))
- #define sign(x) ((x)<0?-1:1)
- #define TRUE 1
- struct point
- {
- int x;
- int y;
- };
- int grline(start,end,color)
- struct point *start, *end;
- int color;
- {
- int x,y,xt,yt,r,delx,dely,dx,dy;
- x=start->x;
- y=start->y;
- xt=end->x;
- yt=end->y;
- r=0;
- while(TRUE)
- {
- setbit(x,y);
- delx=xt-x;
- dely=yt-y;
- dx=abs(delx);
- dy=abs(dely);
- if(dx>=dy)
- {
- if(x==xt)
- return;
- x+=sign(delx);
- r+=dy;
- if(r>=(dx-r))
- {
- y+=sign(dely);
- r-=dx;
- }
- }
- else
- {
- if(y==yt)
- return;
- y+=sign(dely);
- r+=dx;
- if(r>=(dy-r))
- {
- x+=sign(delx);
- r-=dy;
- }
- }
- }
- }